package com.bigevent.anno;

import com.bigevent.validation.StateValidation;
import jakarta.validation.Constraint;
import jakarta.validation.Payload;

import java.lang.annotation.*;
//元注解，被它修饰的注解（State）会在生成的 Javadoc 文档(API文档)中显示。
@Documented
//元注解，标识自定的注解将来用到方法、属性、类、枚举等上。
//@Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.PARAMETER, ElementType.TYPE_USE})
@Target({ElementType.FIELD})//选择属性上
//元注解，标识注解在运行时或者编译阶段使用。
@Retention(RetentionPolicy.RUNTIME)//选择运行
//指定将来谁给这个自定义注解提供校验规则
@Constraint(
        validatedBy = {StateValidation.class}//指定提供校验规则的类
)
public @interface State {
    //提供校验失败信息
    String message() default "State的参数只能是已发布或者草稿";
    //指定校验分组
    Class<?>[] groups() default {};
    //负载，获取自定义注解的附加信息
    Class<? extends Payload>[] payload() default {};
}
